
// foreach 循环问题，不要用这个
// 不返回

string[] sa = new string[] { "a", "b", "c", "d", "e", "f", "g", "h", "i", "j" };

StringBuilder sb = new StringBuilder();
for ( int i=0; i<sa.Count; i++ )
{
    sb.Append( sa[i] );
}
#if DEBUG
Debug.Log( sb.ToString() );
#endif

序列话反序列化
// getComponents不要用
//Input.Touches.Mesh.vertices
// 解决办法：返回copy，返回缓存
// - 缓存需要重复使用的数据
// - 避免在频繁调用的函数中创建新的数组
// - 使用对象池来复用对象，而不是每次都创建新的
/**
1. GetComponents 的问题：
- 每次调用都会创建一个新的数组来存储找到的组件
- 这个数组是在堆内存上分配的
- 如果在 Update 等频繁调用的函数中使用，会导致频繁的内存分配和垃圾回收
2. Input.touches 的问题：
- 每次访问这个属性都会创建一个新的数组
- 即使没有触摸输入，也会创建一个空数组
- 在每帧检测触摸时要特别注意这一点
3. Mesh.vertices 的问题：
- 获取顶点数组时会返回一个新的 Vector3 数组的副本
- 这个数组是在堆内存上分配的
- 频繁访问会导致大量的内存分配

Debug.Log Warning
Lambda表达式，匿名函数
*/